#ifndef GBUFFER_H
#define GBUFFER_H

#include "RenderTarget.h"
#include "../Utility/Renderer/GeometryTypes.h"

class GBuffer
{
public:
	GBuffer();
	~GBuffer();
	GBuffer(GBuffer& _ref);

	static void Initialize(unsigned int _width, unsigned int _height);
	static void Render();
private:
	static bool InitGBuffers(unsigned int _width, unsigned int _height);

	// The depth and stencil surface used for deferred rendering G buffers.
	static IDirect3DSurface9 *m_pDSGBuffers;

	//GBuffer RenderTargets
    static RenderTarget m_DepthRenderTarget;
    static RenderTarget m_DiffuseRenderTarget;
    static RenderTarget m_NormalRenderTarget;
    static RenderTarget m_SpecularRenderTarget;

	//RenderTarget to render the final scene to
	static RenderTarget m_SceneTarget;

	// screen based quad info
	static unsigned int m_StartVertex;
    static unsigned int m_StartIndex;
    static unsigned int m_VertCount;
	static unsigned int m_PrimitiveCount;
};

#endif